나이브 베이즈 분류
1. 개요
1. 개요
나이브 베이즈 분류는 베이즈 정리를 기반으로 한 확률적 분류 알고리즘이다. 이 모델은 특성들 사이의 조건부 독립을 가정한다는 점에서 '나이브(naive, 순진한)'라는 이름이 붙었다. 이 가정은 실제 데이터에서는 거의 성립하지 않지만, 놀랍게도 많은 실제 문제, 특히 텍스트 분류와 같은 고차원 데이터에서 효과적으로 작동한다.
이 분류기의 핵심 아이디어는 주어진 데이터의 특성(예: 문서의 단어들)을 관찰했을 때, 그 데이터가 특정 클래스(예: '스팸' 또는 '정상 메일')에 속할 사후 확률을 계산하는 것이다. 베이즈 정리를 적용하여 사후 확률은 클래스의 사전 확률과 해당 클래스에서 특성이 관찰될 가능도의 곱에 비례한다.
나이브 베이즈 분류기는 학습 속도가 매우 빠르고, 비교적 적은 양의 학습 데이터로도 잘 동작하며, 고차원 데이터에 효율적이라는 장점을 가진다. 이로 인해 초기 스팸 필터링 시스템의 핵심 알고리즘으로 널리 사용되었으며, 감정 분석, 문서 카테고리 분류, 의학 진단 등 다양한 분야에 응용된다.
주요 구현 형태에는 데이터의 특성 분포에 따라 가우시안 나이브 베이즈, 다항 나이브 베이즈, 베르누이 나이브 베이즈 등이 있다. 각 모델은 연속적인 수치 데이터, 문서의 단어 빈도, 이진 특성 데이터 등 서로 다른 데이터 유형에 적합하다.
2. 수학적 배경
2. 수학적 배경
나이브 베이즈 분류의 수학적 기반은 베이즈 정리와 그에 따른 조건부 확률 계산, 그리고 특징(feature)들 간의 조건부 독립이라는 강력한 가정에 있다.
베이즈 정리
분류 문제의 핵심은 주어진 데이터(특징 벡터 \(x\))를 관찰했을 때, 그것이 특정 클래스(\(C_k\))에 속할 사후 확률 \(P(C_k | x)\)를 계산하는 것이다. 베이즈 정리는 이 사후 확률을 사전 확률 \(P(C_k)\)와 우도(likelihood) \(P(x | C_k)\)를 통해 계산할 수 있게 한다. 공식은 다음과 같다.
\[
P(C_k | x) = \frac{P(C_k) \cdot P(x | C_k)}{P(x)}
\]
여기서 분모 \(P(x)\)는 모든 클래스에 대해 동일한 정규화 상수이므로, 클래스를 비교하는 목적에서는 분자 부분 \(P(C_k) \cdot P(x | C_k)\)의 크기만 비교하면 된다. 따라서 나이브 베이즈 분류기는 다음 식을 최대화하는 클래스 \(C_k\)를 선택한다.
\[
\hat{y} = \arg\max_{C_k} P(C_k) \prod_{i=1}^{n} P(x_i | C_k)
\]
조건부 독립 가정
위 최종 식에서 특징 벡터 \(x\)가 \(n\)개의 개별 특징 \(x_1, x_2, ..., x_n\)으로 구성되어 있을 때, \(P(x | C_k)\)는 모든 개별 특징의 확률의 곱 \(\prod_{i=1}^{n} P(x_i | C_k)\)으로 근사된다. 이것이 바로 "나이브(순진한)"이라는 이름이 붙은 핵심 가정인 조건부 독립 가정이다. 이 가정은 클래스가 주어졌을 때 각 특징(feature)의 발생이 서로 독립적이라고 간주하는 것이다.
예를 들어, "대출 신청"이라는 클래스에서 "연봉"과 "직업"이라는 두 특징이 동시에 나타날 확률은, 클래스가 주어진 조건 하에서 "연봉"이 나타날 확률과 "직업"이 나타날 확률을 단순히 곱한 것과 같다고 보는 것이다. 이 가정은 현실에서는 거의 성립하지 않지만, 계산을 매우 단순화하고 고차원 데이터에서도 효율적인 학습을 가능하게 한다. 이 단순화 덕분에 모델은 적은 양의 학습 데이터로도 잘 작동하며, 과적합(overfitting)에 비교적 강건한 특성을 보인다.
2.1. 베이즈 정리
2.1. 베이즈 정리
베이즈 정리는 나이브 베이즈 분류의 핵심이 되는 확률 이론의 기본 정리이다. 이 정리는 사전 확률과 새로운 증거(데이터)를 결합하여 사후 확률을 계산하는 방법을 제공한다. 분류 문제의 맥락에서, 이는 주어진 특성(예: 단어의 출현)을 관찰했을 때 특정 클래스(예: '스팸' 또는 '햄')에 속할 확률을 계산하는 데 사용된다.
베이즈 정리는 다음과 같은 수식으로 표현된다.
P(A|B) = P(B|A) * P(A) / P(B)
여기서 각 기호의 의미는 다음과 같다.
* P(A|B)는 사후 확률로, 사건 B가 발생한 조건 하에서 사건 A가 발생할 확률이다. 분류에서는 '주어진 특성을 가졌을 때 특정 클래스일 확률'에 해당한다.
* P(B|A)는 가능도로, 사건 A가 발생한 조건 하에서 사건 B가 발생할 확률이다. 이는 '특정 클래스에서 주어진 특성이 관찰될 확률'을 의미한다.
* P(A)는 사전 확률로, 사건 A의 사전적(데이터를 보기 전) 발생 확률이다. 이는 각 클래스의 전체 데이터셋 내 기본적인 분포를 반영한다.
* P(B)는 증거 또는 정규화 상수로, 사건 B의 전체 발생 확률이다. 이는 모든 클래스에 걸쳐 동일하므로, 클래스 간 확률 비교 시에는 종종 무시된다.
분류 문제에 적용할 때, 목표는 여러 후보 클래스 C_k 중에서 주어진 특성 벡터 X에 대해 가장 높은 사후 확률 P(C_k|X)를 가지는 클래스를 찾는 것이다. 베이즈 정리에 따라, 이는 각 클래스에 대한 가능도 P(X|C_k)와 사전 확률 P(C_k)의 곱을 최대화하는 클래스를 선택하는 문제로 변환된다. 나이브 베이즈 분류기는 이 계산을 가능하게 하지만, 이를 위해 조건부 독립 가정이라는 단순화를 도입한다.
2.2. 조건부 독립 가정
2.2. 조건부 독립 가정
나이브 베이즈 분류의 핵심은 모든 특성(예측 변수)이 주어진 클래스에 대해 서로 조건부 독립이라는 강력한 가정을 설정하는 데 있다. 이 가정은 모델을 '나이브(순진하다)'고 부르게 만드는 근본적인 이유이다. 실제 세계의 데이터에서는 특성들 사이에 상관관계가 존재하는 경우가 많지만, 이 모델은 그러한 상관관계를 무시하고 각 특성이 클래스 레이블을 예측하는 데 독립적으로 기여한다고 가정한다.
이 가정은 베이즈 정리를 적용하는 방식을 극적으로 단순화한다. 일반적으로 여러 특성 \( x_1, x_2, ..., x_n \) 이 주어졌을 때 클래스 \( C_k \) 의 사후 확률 \( P(C_k | x_1, ..., x_n) \) 을 계산하는 것은 복잡하다. 그러나 조건부 독립 가정 하에서는 이 결합 확률을 각 특성의 조건부 확률의 곱으로 분해할 수 있다. 수식으로 표현하면 다음과 같다.
\[
P(x_1, ..., x_n | C_k) \approx P(x_1 | C_k) \cdot P(x_2 | C_k) \cdots P(x_n | C_k)
\]
이 근사 덕분에 모델은 각 특성 \( x_i \) 에 대한 클래스별 확률 \( P(x_i | C_k) \) 만 개별적으로 추정하면 되며, 복잡한 공분산 구조를 고려할 필요가 없어진다. 이는 계산 효율성을 크게 높이고, 적은 양의 학습 데이터로도 모델을 구축할 수 있게 한다.
물론, 이 가정은 현실을 지나치게 단순화한 것이어서 모델의 주요 한계로 지적된다. 예를 들어, 텍스트 분류에서 '대출'과 '이자율'이라는 단어는 함께 나타날 가능성이 높지만, 모델은 두 단어의 출현이 주어진 클래스(예: 금융 관련 문서) 내에서 서로 독립적이라고 취급한다. 이러한 단순화에도 불구하고, 나이브 베이즈 분류기는 특히 고차원 데이터(예: 텍스트 데이터의 Bag-of-words 표현)에서 놀라울 정도로 강력한 성능을 보이는 경우가 많다[1].
3. 모델의 종류
3. 모델의 종류
나이브 베이즈 분류기는 데이터의 특성 분포에 따라 여러 종류로 구분된다. 가장 일반적으로 사용되는 모델은 가우시안 나이브 베이즈, 다항 나이브 베이즈, 베르누이 나이브 베이즈이다. 각 모델은 특성 변수가 연속형인지 이산형인지, 그리고 그 분포에 대한 가정이 다르다.
모델 | 특성 데이터 유형 | 주요 가정 및 적용 분야 |
|---|---|---|
연속값 | 각 클래스 내의 특성이 정규 분포를 따른다고 가정한다. 일반적으로 실수값 특성을 다루는 문제에 사용된다. | |
이산 카운트(횟수) | 특성이 특정 사건(예: 단어)의 발생 횟수를 나타낼 때 사용된다. Bag-of-Words 모델 기반의 문서 분류에 널리 적용된다. | |
이진값(0/1) | 특성이 특정 사건의 발생 유무(존재/부재)를 나타낼 때 사용된다. 문서 내 단어의 출현 여부를 모델링하는 데 적합하다. |
가우시안 나이브 베이즈는 각 클래스와 특성별로 평균과 분산을 추정하여, 주어진 특성 값이 해당 정규 분포에서 나올 확률을 계산한다. 다항 나이브 베이즈는 각 클래스별로 특성(예: 단어)의 발생 횟수 분포를 추정하며, 라플라스 평활화를 적용하여 관찰되지 않은 특성에 대한 확률이 0이 되는 문제를 방지한다. 베르누이 나이브 베이즈는 이진 특성 벡터를 다루며, 각 특성이 1(존재)일 확률을 클래스별로 모델링한다. 이 모델은 존재하지 않는 특성(0)에 대한 정보도 활용한다는 점에서 다항 모델과 차이가 있다.
3.1. 가우시안 나이브 베이즈
3.1. 가우시안 나이브 베이즈
연속형 데이터를 처리하기 위해 설계된 나이브 베이즈 분류의 변형이다. 이 모델은 각 클래스별로 특징(feature)이 정규 분포(가우시안 분포)를 따른다는 가정을 기반으로 한다. 즉, 각 특징의 값이 특정 클래스 내에서 평균과 분산을 가지는 정규 분포에서 생성되었다고 간주한다.
학습 과정에서는 각 클래스 $C_k$에 대해, 각 특징 $x_i$의 조건부 확률 $P(x_i | C_k)$를 추정한다. 이는 해당 클래스에 속하는 훈련 데이터 샘플들을 사용하여 각 특징의 표본 평균 $\mu_{ik}$와 표본 분산 $\sigma_{ik}^2$을 계산함으로써 이루어진다. 확률 밀도는 다음의 확률 밀도 함수를 사용하여 계산된다.
$$P(x_i | C_k) = \frac{1}{\sqrt{2\pi\sigma_{ik}^2}} \exp\left(-\frac{(x_i - \mu_{ik})^2}{2\sigma_{ik}^2}\right)$$
예측 시에는 새로운 데이터 포인트의 특징 벡터 $\mathbf{x} = (x_1, x_2, ..., x_n)$가 주어졌을 때, 베이즈 정리와 조건부 독립 가정을 적용하여 사후 확률이 가장 높은 클래스를 선택한다. 실제 구현에서는 수치적 안정성을 위해 확률의 로그 값을 계산하는 것이 일반적이다.
가우시안 나이브 베이즈는 데이터의 스케일(scale)에 민감할 수 있다. 특징들의 분산이 크게 다르거나, 데이터가 정규 분포를 크게 벗어나는 경우 성능이 저하될 수 있다. 따라서 전처리 단계에서 특징 스케일링(예: 표준화(Standardization))을 수행하는 것이 권장된다. 이 모델은 연속적인 측정값을 다루는 분야, 예를 들어 의료 진단(검사 수치 기반)이나 제품 품질 관리 등에 적용된다.
3.2. 다항 나이브 베이즈
3.2. 다항 나이브 베이즈
다항 나이브 베이즈는 나이브 베이즈 분류의 한 종류로, 특히 이산형 데이터나 빈도 기반의 데이터를 모델링하는 데 적합하다. 이 모델은 주로 텍스트 분류 문제에 널리 사용되며, 문서 내 단어의 출현 횟수(빈도)를 특징으로 삼는다. 가정하는 데이터의 분포 형태에 따라 가우시안 나이브 베이즈나 베르누이 나이브 베이즈와 구분된다.
이 모델의 핵심은 특징 벡터가 다항 분포를 따른다는 가정에 있다. 예를 들어, 문서 분류에서 하나의 문서는 여러 번 나타날 수 있는 단어들로 구성된 '단어 주머니'로 표현된다. 각 특징(단어) $x_i$는 해당 문서에서 그 단어가 나타난 횟수를 의미하는 정수 값을 가진다. 클래스 $C_k$가 주어졌을 때, 특징 벡터 $\mathbf{x} = (x_1, x_2, ..., x_n)$의 결합 확률은 다항 분포로 모델링된다.
학습 과정에서는 각 클래스별로 특징(예: 어휘의 각 단어)의 조건부 확률을 추정한다. 이는 해당 클래스의 모든 문서에서 각 단어가 나타난 총 횟수를 기반으로 계산된다. 일반적으로 라플라스 평활(Laplace smoothing)이나 가산 평활(additive smoothing)이 적용되어 훈련 데이터에 전혀 등장하지 않은 단어에 대한 확률이 0이 되는 문제를 방지한다. 최종 예측 시, 새 문서에 대한 각 클래스의 사후 확률은 클래스의 사전 확률과 문서 내 각 단어의 조건부 확률을 그 단어의 출현 횟수만큼 곱한 값을 바탕으로 계산된다.
특징 | 설명 |
|---|---|
데이터 유형 | 이산형 카운트 데이터 (예: 단어 빈도) |
가정하는 분포 | 다항 분포 |
주요 응용 분야 | 문서 분류, 토픽 모델링 |
확률 추정 | 클래스별 단어 빈도의 상대적 비율 (평활화 적용) |
입력 예시 | 문서 = {"the": 2, "cat": 1, "sat": 1} |
따라서 다항 나이브 베이즈는 텍스트와 같이 특징이 발생 횟수로 표현되는 데이터에 효과적이다. 그러나 모든 특징(단어)이 클래스 내에서 조건부 독립이라는 강한 가정을 하기 때문에, 단어 간의 상관관계나 문맥 정보는 모델에 반영되지 않는 한계를 가진다.
3.3. 베르누이 나이브 베이즈
3.3. 베르누이 나이브 베이즈
베르누이 나이브 베이즈는 특징 벡터가 이진(binary) 값, 즉 0 또는 1로 표현되는 데이터에 적합한 나이브 베이즈 분류의 한 변형이다. 이 모델은 각 특징이 특정 클래스에 대해 베르누이 분포를 따른다고 가정한다. 즉, 각 특징은 주어진 클래스에 대해 '발생'(1) 또는 '발생하지 않음'(0)의 두 가지 상태만을 가진다. 이 접근법은 특히 텍스트 데이터를 Bag-of-Words 모델로 표현할 때, 단어의 출현 여부만을 고려하는 경우에 널리 사용된다.
학습 과정에서 모델은 각 클래스 $c$와 각 특징(예: 단어) $x_i$에 대한 확률 $P(x_i = 1 | c)$를 추정한다. 이는 해당 클래스의 문서들 중에서 특징 $x_i$가 한 번 이상 나타나는 문서의 비율로 계산된다[2]. 특징이 0일 확률은 $1 - P(x_i = 1 | c)$로 간단히 유도된다. 클래스 사전 확률 $P(c)$는 일반적으로 각 클래스의 문서 빈도로 추정한다.
예측 시, 새로운 샘플(예: 문서) $d$가 주어지면, 모델은 해당 샘플에 존재하는 특징(값이 1인 특징)과 존재하지 않는 특징(값이 0인 특징)을 모두 고려하여 클래스별 사후 확률을 계산한다. 수식은 다음과 같은 형태를 띈다.
$$P(c|d) \propto P(c) \prod_{i=1}^{n} P(x_i | c) = P(c) \prod_{i: x_i = 1} P(x_i = 1 | c) \prod_{i: x_i = 0} (1 - P(x_i = 1 | c))$$
실제 구현에서는 수치적 안정성을 위해 로그 확률의 합을 계산한다.
특징 | ||
|---|---|---|
데이터 표현 | 단어의 빈도(횟수) | 단어의 출현 여부(0/1) |
확률 모델 | ||
주요 적용 분야 | 문서 내 단어 중요도가 빈도에 비례할 때 | 문서의 주제가 특정 단어의 유무에 더 민감할 때 |
장점 | 단어 발생 빈도 정보 활용 | 긴 문서의 영향 완화, 희소한 특징 처리에 유리 |
따라서, 베르누이 나이브 베이즈는 문서 분류에서 단어의 빈도보다는 그 존재 유무 자체가 더 중요한 지표가 되는 문제, 예를 들어 특정 주제를 논하는 문서에 핵심 키워드가 등장하는지 여부를 판단하는 경우에 효과적이다.
4. 학습 및 예측 과정
4. 학습 및 예측 과정
나이브 베이즈 분류기의 학습 과정은 주어진 훈련 데이터로부터 각 클래스의 사전 확률과, 각 특징이 특정 클래스에 속할 조건부 확률을 추정하는 것을 핵심으로 한다. 이는 모수 추정 문제로 볼 수 있다. 가장 일반적인 방법은 최대우도추정을 사용하는 것이다. 클래스 $c_k$의 사전 확률 $P(C=c_k)$는 전체 훈련 샘플 수 $N$ 대비 해당 클래스에 속하는 샘플 수 $N_{c_k}$의 비율로 추정한다. 즉, $P(C=c_k) = N_{c_k} / N$ 이다. 각 특징 $x_i$에 대한 조건부 확률 $P(X_i=x_i | C=c_k)$는 데이터의 유형(이산형/연속형)과 선택한 모델(가우시안 나이브 베이즈, 다항 나이브 베이즈 등)에 따라 다른 방법으로 추정한다.
예측 과정은 학습된 확률 모델을 바탕으로 새로운 샘플 $\mathbf{x} = (x_1, x_2, ..., x_n)$에 대한 클래스를 결정한다. 베이즈 정리와 조건부 독립 가정에 따라, 클래스 $c_k$에 속할 사후 확률은 $P(c_k | \mathbf{x}) \propto P(c_k) \prod_{i=1}^{n} P(x_i | c_k)$ 로 계산된다. 실제 구현에서는 매우 작은 확률 값들의 곱으로 인한 언더플로를 방지하기 위해, 확률 대신 로그 확률을 사용하여 합으로 계산하는 것이 일반적이다. 최종 예측 $\hat{y}$은 계산된 모든 클래스의 사후 확률(또는 로그 확률) 중에서 가장 큰 값을 갖는 클래스로 할당된다. 이는 최대사후확률추정 원칙에 따른다.
단계 | 주요 작업 | 수학적 표현/설명 |
|---|---|---|
학습 | 사전 확률 추정 | $P(C=c_k) = \frac{N_{c_k}}{N}$ |
조건부 확률 추정 | 데이터 유형에 따라 MLE 적용 (예: 정규분포의 평균/분산 추정) | |
예측 | 사후 확률 계산 | $P(c_k \ |
로그 변환 적용 | $\log P(c_k) + \sum_{i=1}^{n} \log P(x_i \ | |
클래스 결정 | $\hat{y} = \arg\max_{c_k} [\log P(c_k) + \sum_{i=1}^{n} \log P(x_i \ |
이 과정에서 특징의 조건부 독립 가정이 깨지는 경우, 즉 특징 간 상관관계가 강할수록 확률 추정에 오류가 발생하여 예측 성능이 저하될 수 있다. 또한, 훈련 데이터에 존재하지 않은 특징 값 조합이 나타나면 해당 조건부 확률이 0이 되어 전체 예측에 영향을 미칠 수 있는데, 이를 방지하기 위해 라플라스 평활화 같은 기법이 사용된다.
4.1. 모수 추정
4.1. 모수 추정
나이브 베이즈 분류 모델의 학습 과정은 주어진 훈련 데이터를 바탕으로 각 클래스에 대한 사전 확률과, 각 특징이 특정 클래스에서 나타날 조건부 확률을 추정하는 것을 핵심으로 한다. 이 추정된 값들이 모델의 모수를 구성한다.
사전 확률 P(C_k)는 각 클래스의 빈도에 기반하여 추정된다. 가장 일반적인 방법은 훈련 데이터셋에서 클래스 C_k에 속하는 샘플의 수(N_k)를 전체 샘플 수(N)로 나누는 것이다. 즉, P(C_k) = N_k / N 이다. 라플라스 평활과 같은 기법을 적용하지 않는 한, 이는 최대우도추정에 해당한다.
각 특징의 조건부 확률 P(x_i | C_k)는 사용하는 나이브 베이즈의 변종에 따라 추정 방식이 달라진다. 다항 나이브 베이즈의 경우, 클래스 C_k 내에서 특징(단어) i가 나타난 횟수를 세고, 클래스 C_k의 모든 특징의 총 발생 횟수로 나누어 추정한다. 베르누이 나이브 베이즈는 각 특징의 존재 여부(1 또는 0)에 집중하며, 클래스 C_k에서 특징 i가 존재하는 문서의 비율을 계산한다. 가우시안 나이브 베이즈는 연속적인 수치 특징을 가정하며, 각 클래스 C_k에 대해 각 특징 i의 표본 평균(μ_{ki})과 표본 분산(σ_{ki}^2)을 계산하여 정규분포의 모수를 추정한다.
모델 변종 | 추정 대상 (P(x_i \ | C_k)) | 추정 방법 (일반적) |
|---|---|---|---|
다항(Multinomial) | 특징 i의 발생 확률 | (클래스 k에서 특징 i의 출현 횟수) / (클래스 k의 총 특징 출현 횟수) | |
베르누이(Bernoulli) | 특징 i가 존재할 확률 | (클래스 k에서 특징 i가 존재하는 문서 수) / (클래스 k의 총 문서 수) | |
가우시안(Gaussian) | 특징 i의 정규분포 모수 | 클래스 k 내 특징 i 값의 평균(μ)과 분산(σ²) |
이러한 모수 추정 과정은 모든 특징이 클래스에 대해 조건부 독립이라는 나이브 베이즈 가정 덕분에 매우 효율적이다. 각 특징의 확률 분포를 클래스별로 독립적으로 추정할 수 있어, 계산 복잡도가 낮고 대용량 데이터에 대해서도 빠른 학습이 가능해진다.
4.2. 로그 확률 계산
4.2. 로그 확률 계산
나이브 베이즈 분류기의 예측 과정에서 사후 확률을 직접 계산하는 대신, 로그 확률을 계산하는 것이 일반적이다. 이는 여러 조건부 확률의 곱으로 이루어진 결합 확률 값이 컴퓨터의 부동소수점 정밀도 범위를 벗어나는 언더플로우 문제를 방지하기 위함이다. 확률의 곱은 로그 변환을 통해 합으로 변환되어 수치적 안정성을 크게 높인다.
예측하고자 하는 클래스 \( C_k \)에 대한 로그 우도는 다음과 같이 계산된다. 각 특성 \( x_i \)가 주어졌을 때의 조건부 확률 \( P(x_i | C_k) \)의 곱 대신, 이들의 로그 값의 합을 구한다.
\[
\log P(C_k) + \sum_{i=1}^{n} \log P(x_i | C_k)
\]
여기서 \( P(C_k) \)는 클래스 \( C_k \)의 사전 확률이다. 최종 예측은 이 로그 확률을 계산한 뒤, 모든 가능한 클래스 \( C_1, C_2, ..., C_K \) 중에서 계산된 로그 확률 값이 가장 큰 클래스를 선택하는 방식으로 이루어진다. 로그 함수는 단조 증가 함수이므로, 확률의 크기 순서를 바꾸지 않아도 최대값을 찾는 데 문제가 없다.
로그 확률 계산은 모든 종류의 나이브 베이즈 모델(가우시안 나이브 베이즈, 다항 나이브 베이즈, 베르누이 나이브 베이즈)에 공통적으로 적용되는 핵심 단계이다. 실제 구현체, 예를 들어 scikit-learn의 GaussianNB, MultinomialNB, BernoulliNB 클래스들은 내부적으로 예측을 수행할 때 이 방식을 사용하여 안정적인 결과를 제공한다.
5. 장점과 단점
5. 장점과 단점
나이브 베이즈 분류기는 구현이 간단하고 계산 효율이 매우 높다는 장점을 가진다. 훈련 데이터에 대한 한 번의 순회로 필요한 확률 통계를 계산할 수 있어 학습 속도가 빠르며, 대용량 데이터셋에도 잘 적용된다. 또한 과적합에 비교적 강건한 편이며, 특히 차원의 저주 문제가 두드러지는 고차원 데이터(예: 텍스트 데이터)에서도 좋은 성능을 보인다. 이는 조건부 독립이라는 강한 가정 덕분에 필요한 모수의 수가 크게 줄어들기 때문이다.
그러나 이 모델의 가장 큰 단점은 바로 그 조건부 독립 가정 자체이다. 실제 세계의 특징들은 서로 상관관계를 가지는 경우가 많기 때문에, 이 가정이 위배되면 모델의 성능이 저하될 수 있다. 또한 특징이 연속형 변수일 경우, 가우시안 나이브 베이즈와 같이 데이터 분포를 특정 확률 분포(예: 정규 분포)로 가정해야 하는데, 이 가정이 맞지 않으면 예측 정확도에 부정적인 영향을 미친다.
장점 | 단점 |
|---|---|
학습 및 예측 속도가 매우 빠름 | 특징 간의 조건부 독립이라는 비현실적 가정에 의존 |
적은 양의 훈련 데이터로도 작동 가능 | 특징 간 상관관계가 높은 데이터에서는 성능 저하 |
고차원 데이터에 효과적 | "희소 문제": 훈련 데이터에 나타나지 않은 특징-클래스 조합에 대한 확률이 0이 될 수 있음[3] |
과적합에 비교적 강건 | 연속형 특징에 대한 분포 가정이 잘못되면 성능 하락 |
또 다른 실용적인 한계로는 "희소 문제"를 들 수 있다. 특정 특징이 어떤 클래스에서 한 번도 관찰되지 않으면 해당 조건부 확률이 0이 되어 전체 예측에 지배적인 영향을 미치게 된다. 이는 라플라스 평활화와 같은 기법으로 완화할 수 있다. 전반적으로 나이브 베이즈 분류기는 계산 효율성을 중시하는 기준 모델이나, 전처리된 텍스트 분류와 같은 특정 도메인에서 여전히 유용하게 사용된다.
5.1. 장점
5.1. 장점
나이브 베이즈 분류기는 베이즈 정리와 조건부 독립 가정을 기반으로 하기 때문에 구현이 간단하고 계산 효율이 매우 높다. 학습 과정은 각 특성의 사전 확률과 우도를 추정하는 것으로, 일반적으로 최대우도추정을 통해 이루어진다. 이는 데이터의 크기에 선형적으로 비례하는 빠른 학습 속도를 보장한다.
예측 시에도 계산 복잡도가 낮아 실시간 응용 분야에 적합하다. 적은 양의 훈련 데이터로도 비교적 좋은 성능을 발휘할 수 있으며, 특히 차원의 저주 문제에 강건한 편이다. 또한, 과적합에 빠질 가능성이 다른 복잡한 모델에 비해 상대적으로 적다.
이 모델은 특성 간의 상관관계를 무시하는 단순한 가정에도 불구하고, 실제로 많은 현실 문제, 특히 텍스트 분류나 스팸 필터링과 같은 고차원 데이터에서 놀랍도록 효과적인 성능을 보인다. 이는 문서 분류에서 단어의 발생이 다른 단어에 독립적이라는 가정이 합리적으로 성립하는 경우가 많기 때문이다.
5.2. 단점 및 한계
5.2. 단점 및 한계
나이브 베이즈 분류의 가장 큰 단점은 모든 특성 변수 간의 조건부 독립을 가정한다는 점이다. 이는 현실 세계의 데이터에서 흔히 관찰되는 특성 간 상관관계를 무시하게 만든다. 예를 들어, 텍스트 분류에서 '좋다'와 '멋지다'라는 단어는 함께 나타날 가능성이 높지만, 모델은 이를 독립적으로 취급한다. 이러한 가정 위반은 모델의 예측 정확도에 부정적인 영향을 미칠 수 있다[4].
또 다른 중요한 한계는 0-빈도 문제에 취약하다는 것이다. 학습 데이터에 전혀 등장하지 않은 특성 값과 클래스 조합이 테스트 데이터에 나타나면, 해당 조건부 확률이 0으로 추정되어 전체 예측 확률을 0으로 만들어버린다. 이 문제를 완화하기 위해 라플라스 평활화나 애드원 평활화와 같은 기법이 사용되지만, 완전히 해결되는 것은 아니다.
단점 | 설명 |
|---|---|
조건부 독립 가정 | 현실성 부족. 특성 간 상관관계를 모델링하지 못함. |
0-빈도 문제 | 학습 데이터에 없는 조합에 대한 예측 불가. 평활화 기법 필요. |
사전 확률 의존성 | 클래스 사전 확률 추정이 부정확하면 예측 성능 하락. |
수치형 데이터 처리 | 가우시안 모델은 데이터가 정규분포를 따른다는 강한 가정이 필요함. |
마지막으로, 이 모델은 생성 모델이지만 특성의 중요도를 직접적으로 해석하거나 시각화하기 어려운 경우가 많다. 예측은 빠르게 수행할 수 있으나, 특성 간 복잡한 상호작용을 포착하는 데는 한계가 있다. 따라서 특성 간 종속성이 강하거나 데이터 분포가 매우 복잡한 문제에는 로지스틱 회귀나 서포트 벡터 머신, 신경망과 같은 더 정교한 모델이 선호된다.
6. 응용 분야
6. 응용 분야
나이브 베이즈 분류기는 특히 텍스트 데이터를 기반으로 한 분류 문제에서 널리 응용된다. 그 단순성과 효율성 덕분에 대용량 데이터셋에서도 빠른 예측이 가능하며, 스팸 메일 필터링의 초기 모델로 유명하다. 이 모델은 각 단어(특성)가 클래스(예: 스팸 또는 햄)에 주어졌을 때 조건부 독립이라는 가정을 바탕으로 문서의 전체 확률을 계산한다.
텍스트 분류 작업에서 가장 일반적으로 사용되는 변형은 다항 나이브 베이즈이다. 이 모델은 문서 내 단어의 출현 빈도(횟수)를 고려하여, 특정 주제(예: 스포츠, 정치, 기술)로 문서를 분류하는 데 적합하다. 또한 감정 분석에서도 빈번히 활용되어, 리뷰나 소셜 미디어 텍스트가 긍정적 또는 부정적 감정을 나타내는지를 판별한다. 이러한 응용은 각 단어가 감정 클래스에 미치는 사전 확률을 학습함으로써 이루어진다.
베르누이 나이브 베이즈는 단어의 출현 여부(0 또는 1)에 초점을 맞추어 이진 특성 표현에 적합하다. 이는 특정 단어가 문서에 존재하는지 아닌지만이 중요한 경우, 예를 들어 짧은 키워드 기반의 분류에 유용하게 적용될 수 있다.
나이브 베이즈의 응용 범위는 텍스트를 넘어서기도 한다. 가우시안 나이브 베이즈는 연속적인 수치 데이터를 분류하는 데 사용된다. 예를 들어, 의료 진단에서 여러 생리학적 지표(혈압, 혈당 등)를 기반으로 질병 유무를 판단하거나, 생물정보학에서 단백질 서열 분류에 적용되기도 한다[5].
6.1. 텍스트 분류
6.1. 텍스트 분류
나이브 베이즈 분류기는 텍스트 분류 문제에서 가장 널리 사용되는 기계 학습 알고리즘 중 하나이다. 이 모델은 문서를 사전에 정의된 카테고리(예: 스포츠, 정치, 기술)로 자동 할당하는 작업에 특히 효과적이다. 그 핵심은 문서를 단어의 집합으로 보고, 각 카테고리에서 특정 단어들이 나타날 확률을 학습하여 새로운 문서가 어떤 카테고리에 속할지 예측하는 것이다. 이 접근법은 다항 나이브 베이즈나 베르누이 나이브 베이즈와 같은 변형 모델을 통해 구현된다.
텍스트 분류에 나이브 베이즈를 적용할 때는 일반적으로 자연어 처리의 전처리 단계가 선행된다. 텍스트는 토큰화를 통해 단어나 n-gram으로 분리되고, 불용어 제거, 어간 추출 등의 과정을 거친다. 이후 각 단어는 특성 공간의 한 차원으로 간주되어 특성 벡터로 변환된다. 나이브 베이즈 분류기는 이 벡터를 입력받아, 베이즈 정리와 조건부 독립 가정을 바탕으로 문서가 각 카테고리에 속할 사후 확률을 계산한다. 계산 효율성을 위해 확률의 곱 대신 로그 확률의 합을 구하는 방식이 주로 사용된다.
이 알고리즘이 텍스트 분류에 강점을 보이는 이유는 상대적으로 적은 양의 훈련 데이터로도 효율적으로 학습할 수 있고, 고차원의 희소한 데이터(수만 개의 서로 다른 단어)를 잘 처리할 수 있기 때문이다. 또한 학습과 예측 속도가 매우 빠르며, 과적합에 비교적 강건한 편이다. 하지만 모든 특성(단어)이 서로 독립적이라는 강한 가정은 실제 언어의 맥락적 의존성을 무시한다는 한계를 가진다. 예를 들어 "not good"과 "good"은 전혀 다른 감정을 나타내지만, 모델은 'not'과 'good'을 독립적으로 처리할 수밖에 없다.
분류 작업 예시 | 사용되는 나이브 베이즈 변형 | 주요 특징 |
|---|---|---|
뉴스 기사 카테고리 분류 | 단어의 등장 빈도를 고려함 | |
스팸 메일 탐지 | 단어의 유무(0/1)를 이진 특성으로 사용함 | |
감정 분석(긍정/부정) | 다항 또는 베르누이 나이브 베이즈 | 단어의 감정적 극성을 학습함 |
이러한 특성들 덕분에 나이브 베이즈 분류기는 스팸 필터링, 감정 분석, 주제 분류, 저자 식별 등 다양한 텍스트 기반 분류 작업의 실용적인 기준 모델로 자리 잡았다.
6.2. 스팸 필터링
6.2. 스팸 필터링
스팸 필터링은 나이브 베이즈 분류의 가장 대표적이고 성공적인 응용 분야 중 하나이다. 이메일 시스템에서 합법적인 메일(햄)과 원치 않는 광고 또는 악성 메일(스팸)을 자동으로 구분하는 데 널리 사용된다. 각 이메일은 단어 또는 토큰의 집합으로 표현되며, 분류기는 이메일 내용에 나타나는 단어들의 패턴을 바탕으로 스팸일 확률을 계산한다.
학습 단계에서는 수많은 스팸 메일과 햄 메일로 구성된 레이블된 데이터셋을 사용한다. 알고리즘은 각 클래스(스팸/햄)에서 각 단어가 나타날 조건부 확률을 추정한다. 예를 들어, "무료", "당첨", "급여"와 같은 단어는 스팸 클래스에서 더 높은 확률을 가지는 반면, "회의", "보고서", "프로젝트"와 같은 단어는 햄 클래스에서 더 높은 확률을 가질 수 있다[6]. 베르누이 나이브 베이즈나 다항 나이브 베이즈 모델이 주로 이 작업에 적용된다.
예측 시, 새로 도착한 이메일에 포함된 단어들의 확률을 결합하여 베이즈 정리에 따라 최종 클래스를 결정한다. 나이브 베이즈의 계산 효율성과 실시간 처리 능력은 대량의 이메일을 빠르게 분류해야 하는 환경에 매우 적합하다. 또한 상대적으로 적은 양의 학습 데이터로도 합리적인 성능을 발휘할 수 있다는 장점이 있다.
특징 | 스팸 필터링에서의 역할 |
|---|---|
빠른 학습 및 예측 | 대규모 이메일 트래픽을 실시간으로 처리 가능 |
고차원 데이터 처리 | 이메일을 구성하는 수천 개의 단어(특징)를 효율적으로 다룸 |
단순한 구현 | 복잡한 파라미터 튜닝 없이 비교적 쉽게 배포 가능 |
그러나 이 방법은 단어 간의 조건부 독립 가정을 하기 때문에, "무료"와 "체험" 같이 함께 자주 등장해 의미를 강화하는 단어들의 연관성을 고려하지 못한다는 한계를 가진다. 현대의 스팸 필터링 시스템은 종종 나이브 베이즈를 기반으로 하되, 이를 보완하기 위해 다른 기법들을 함께 사용하는 하이브리드 방식을 채택하기도 한다.
6.3. 감정 분석
6.3. 감정 분석
나이브 베이즈 분류기는 텍스트 분류의 한 유형인 감정 분석 작업에 널리 적용된다. 감정 분석은 주어진 텍스트 데이터(예: 제품 리뷰, 소셜 미디어 게시글, 뉴스 기사)가 긍정적, 부정적 또는 중립적인 감정을 표현하고 있는지를 자동으로 판별하는 것을 목표로 한다. 이 모델은 텍스트를 Bag-of-Words 모델이나 n-gram과 같은 특징 표현으로 변환한 후, 각 단어(또는 n-gram)의 출현이 특정 감정 범주에 속할 조건부 확률을 학습한다.
학습 과정에서는 레이블이 지정된 감정 코퍼스(예: 긍정/부정 리뷰 데이터셋)를 사용한다. 다항 나이브 베이즈나 베르누이 나이브 베이즈가 일반적으로 선택되며, 전자는 단어의 빈도를, 후자는 단어의 출현 유무(0/1)를 특징으로 사용한다. 모델은 사전 확률과 우도를 추정하는데, 예를 들어 "훌륭하다"라는 단어가 긍정 리뷰에서 관찰될 확률이 부정 리뷰에서보다 훨씬 높게 계산된다.
실제 적용에서는 새로운 텍스트(예: "이 영화는 정말 지루하고 실망스럽다")가 입력되면, 텍스트를 구성하는 단어들의 조건부 확률을 결합하여 각 감정 클래스에 대한 사후 확률을 계산한다. 조건부 독립 가정에 따라 각 단어의 확률은 독립적으로 곱해지며, 최종적으로 사후 확률이 가장 높은 클래스(이 경우 '부정')로 텍스트를 분류한다.
이 접근법은 구현이 간단하고 계산 효율이 높아 대용량 텍스트 스트림을 실시간으로 분석해야 하는 소셜 미디어 모니터링이나 고객 피드백 분석 시스템에 효과적이다. 그러나 문맥을 무시하는 나이브 베이즈의 본질적 한계로 인해, "기대를 저버리지 않는다"와 같은 부정어가 포함된 긍정적 표현이나 반어법을 정확히 해석하는 데는 어려움을 겪을 수 있다.
7. 구현 및 실습
7. 구현 및 실습
나이브 베이즈 분류기의 구현은 scikit-learn과 같은 현대적인 머신러닝 라이브러리를 통해 매우 간단해졌다. scikit-learn의 naive_bayes 모듈은 데이터의 특성에 따라 가우시안 나이브 베이즈, 다항 나이브 베이즈, 베르누이 나이브 베이즈 등 주요 변종을 제공한다. 사용자는 GaussianNB(), MultinomialNB(), BernoulliNB()와 같은 클래스를 임포트하여 모델 객체를 생성한 후, fit() 메서드로 학습하고 predict() 메서드로 예측을 수행할 수 있다. 이 과정은 다른 분류기와 동일한 API를 따르므로 일관된 워크플로우를 유지할 수 있다.
실습에서는 일반적으로 IRIS 데이터셋이나 텍스트 분류를 위한 20 뉴스그룹 데이터셋과 같은 표준 데이터셋을 사용한다. 전형적인 구현 단계는 다음과 같다.
1. 필요한 라이브러리(sklearn.naive_bayes, sklearn.model_selection, sklearn.metrics 등)를 임포트한다.
2. 데이터를 불러와 특성(X)과 레이블(y)로 분리한다.
3. train_test_split을 이용해 데이터를 훈련 세트와 테스트 세트로 나눈다.
4. 적절한 나이브 베이즈 분류기 클래스의 인스턴스를 생성하고 훈련 세트로 fit한다.
5. 테스트 세트에 대해 predict를 수행하여 정확도, 정밀도, 재현율 등의 지표로 성능을 평가한다.
텍스트 데이터를 다룰 때는 주로 다항 나이브 베이즈를 사용하며, 이 경우 데이터 전처리 단계가 추가된다. BoW나 TF-IDF와 같은 기법으로 텍스트를 수치 벡터로 변환한 후 모델에 입력해야 한다. scikit-learn의 CountVectorizer나 TfidfVectorizer가 이 변환을 담당한다.
구현 단계 | 사용 모듈/클래스 | 주요 메서드 | 비고 |
|---|---|---|---|
데이터 분할 |
|
| |
모델 생성 |
|
| 데이터 특성에 따라 선택 |
모델 학습 | 생성된 모델 객체 |
| |
예측 수행 | 학습된 모델 객체 |
| |
성능 평가 |
|
|
간단한 코드 예시는 다음과 같다.
```python
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.metrics import accuracy_score
# 데이터 로드
iris = datasets.load_iris()
X, y = iris.data, iris.target
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 모델 생성 및 학습
model = GaussianNB()
model.fit(X_train, y_train)
# 예측 및 평가
predictions = model.predict(X_test)
print(accuracy_score(y_test, predictions))
```
이러한 표준화된 구현 방식을 통해 나이브 베이즈는 복잡한 수식적 배경 없이도 빠르게 프로토타입을 만들고 기본 성능을 확인하는 데 널리 활용된다.
7.1. Python (scikit-learn)
7.1. Python (scikit-learn)
나이브 베이즈 분류기는 scikit-learn 라이브러리에서 sklearn.naive_bayes 모듈을 통해 쉽게 구현하고 사용할 수 있다. 이 모듈은 데이터의 특성에 따라 가우시안 나이브 베이즈, 다항 나이브 베이즈, 베르누이 나이브 베이즈 등 주요 모델을 클래스 형태로 제공한다.
각 모델은 fit() 메서드로 학습하고 predict() 메서드로 예측을 수행한다. 사용 예시는 다음과 같다.
```python
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn import datasets
# 데이터 로드
iris = datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3)
# 모델 생성 및 학습
model = GaussianNB()
model.fit(X_train, y_train)
# 예측 및 평가
predictions = model.predict(X_test)
accuracy = (predictions == y_test).mean()
```
scikit-learn 구현체는 라플라스 평활화를 기본적으로 지원하여 영빈도 문제를 방지한다. 또한 predict_proba() 메서드를 통해 각 클래스에 대한 예측 확률을 얻을 수 있어, 확률적 해석이 필요한 작업에 유용하다. 모델 선택은 데이터의 특성에 따라 결정된다.
모델 클래스 | 주요 사용 사례 | 데이터 특성 |
|---|---|---|
| 연속형 데이터 | 특성이 실수값이고 정규 분포를 따른다고 가정 |
| 텍스트 분류, 카운트 데이터 | 특성이 이산적이고 빈도(카운트)를 나타냄 |
| 이진 특성 데이터 | 특성이 참/거짓(1/0)의 이진값을 가짐 |
이러한 구현은 간결한 API와 효율적인 계산 덕분에 프로토타이핑과 실제 프로덕션 환경 모두에서 널리 사용된다.
7.2. 실제 데이터셋 적용 예시
7.2. 실제 데이터셋 적용 예시
나이브 베이즈 분류기는 실제 데이터를 활용한 다양한 분류 문제에 널리 적용된다. 대표적인 예로 붓꽃 데이터셋을 이용한 품종 분류를 들 수 있다. 이 데이터셋은 꽃받침 길이와 너비, 꽃잎 길이와 너비라는 네 개의 연속형 특징을 바탕으로 세 종류의 붓꽃 품종을 분류하는 데 사용된다. 가우시안 나이브 베이즈 모델은 각 특징이 클래스별 정규분포를 따른다는 가정 하에, 이 데이터를 학습하여 새로운 꽃의 측정값으로부터 품종을 높은 정확도로 예측한다.
텍스트 분류 문제에서는 다항 나이브 베이즈나 베르누이 나이브 베이즈 모델이 자주 사용된다. 예를 들어, 20 뉴스그룹 데이터셋은 컴퓨터, 과학, 종교 등 약 20개의 주제로 분류된 수만 개의 뉴스 기사 문서로 구성되어 있다. 모델은 문서 내 단어의 출현 빈도나 존재 여부를 특징으로 학습하여, 새로운 기사의 주제를 자동으로 카테고리화한다. 이는 문서 분류의 기본적인 실습 예시가 된다.
또 다른 일반적인 응용 예시는 와인 품질 데이터셋을 이용한 등급 분류이다. 이 데이터는 산도, 당도, 알코올 농도 등 와인의 화학적 성분을 특징으로 하여 품질 등급(예: 3~9점)을 예측하는 문제에 적합하다. 나이브 베이즈 분류기는 간단한 구현과 빠른 속도 덕분에 이러한 다중 클래스 분류 문제에 대한 기본 벤치마크 모델로 자주 활용된다[7].
아래 표는 나이브 베이즈 분류 실습에 자주 사용되는 공개 데이터셋의 예를 정리한 것이다.
데이터셋 이름 | 주요 특징 유형 | 분류 작업 | 적합한 나이브 베이즈 변형 |
|---|---|---|---|
연속값 (길이, 너비) | 다중 클래스 (3종) | ||
이진/빈도 (단어 존재/빈도) | 이진 분류 (스팸/햄) | ||
빈도 (단어 수) | 다중 클래스 (20개 토픽) | ||
연속값 (화학 성분) | 다중 클래스 (품질 등급) |
